﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NHibernate.Mapping.Attributes;
using System.Runtime.Serialization;

namespace VemTransporte.Models.Basica
{
    [DataContract]
    [KnownType(typeof(Parada))]
    [Class(Table="Parada")]
    public class Parada
    {
        #region Atributos
        private int id;
        private string numero;
        private double latitude;
        private double longitude;
        private IList<LinhaParada> _ParadaLinhas;
        private string tempoChegadaOnibus;

        private IList<VeiculoParada> _VeiculoParadas;
        #endregion

        #region Propriedades
        [DataMember]
        [Id(Name = "Id", Column = "PK_IdParada")]
        [Generator(1, Class = "native")]
        public virtual int Id
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        [Property(Column = "PAR_Numero")]
        public virtual string Numero
        {
            get { return numero; }
            set { numero = value; }
        }

        [DataMember]
        [Property(Column = "PAR_Latitude")]
        public virtual double Latitude
        {
            get { return latitude; }
            set { latitude = value; }
        }

        [DataMember]
        [Property(Column = "PAR_Longitude")]
        public virtual double Longitude
        {
            get { return longitude; }
            set { longitude = value; }
        }


        [Bag]
        [Key(1, Column = "FK_IdParada")]
        [OneToMany(2, ClassType = typeof(VeiculoParada))]
        public virtual IList<VeiculoParada> VeiculoParadas
        {
            get { return _VeiculoParadas; }
            set { _VeiculoParadas = value; }
        }

        public virtual void AddVeiculoParada(VeiculoParada veiculoParada)
        {
            veiculoParada.Parada = this;
            this._VeiculoParadas.Add(veiculoParada);
        }

        [DataMember]
        public virtual string TempoChegadaOnibus
        {
            get { return tempoChegadaOnibus; }
            set { tempoChegadaOnibus = value; }
        }

        [Bag(0, Fetch = CollectionFetchMode.Join, Cascade = "all-delete-orphan", Inverse = true)]
        [Key(1, Column = "FK_IdParada")]
        [OneToMany(2, ClassType = typeof(LinhaParada))]
        public virtual IList<LinhaParada> ParadaLinhas
        {
            get { return _ParadaLinhas; }
            set { _ParadaLinhas = value; }
        }

        public virtual void AddParadaLinhas(LinhaParada paradaLinhas)
        {
            paradaLinhas.Parada = this;
            this._ParadaLinhas.Add(paradaLinhas);
        }
        #endregion

        #region Construtores
        public Parada() { }
        #endregion

    }
}